Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Specification by example</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Specification_by_example"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Specification_by_example rootpage-Specification_by_example skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Specification by example</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */


.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><table class="sidebar sidebar-collapse nomobile"><tbody><tr><td class="sidebar-pretitle">Part of a series on</td></tr><tr><th class="sidebar-title-with-pretitle"><a href="Software_development" title="Software development">Software development</a></th></tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Core activities</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Data_modeling" title="Data modeling">Data modeling</a></li>
<li><a href="Software_development_process" title="Software development process">Processes</a></li>
<li><a href="Requirements_analysis" title="Requirements analysis">Requirements</a></li>
<li><a href="Software_design" title="Software design">Design</a></li>
<li><a href="Software_construction" title="Software construction">Construction</a></li>
<li><a href="Software_engineering" title="Software engineering">Engineering</a></li>
<li><a href="Software_testing" title="Software testing">Testing</a></li>
<li><a href="Debugging" title="Debugging">Debugging</a></li>
<li><a href="Software_deployment" title="Software deployment">Deployment</a></li>
<li><a href="Software_maintenance" title="Software maintenance">Maintenance</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Paradigms and models</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Agile_software_development" title="Agile software development">Agile</a></li>
<li><a href="Cleanroom_software_engineering" title="Cleanroom software engineering">Cleanroom</a></li>
<li><a href="Incremental_build_model" title="Incremental build model">Incremental</a></li>
<li><a href="Software_prototyping" title="Software prototyping">Prototyping</a></li>
<li><a href="Spiral_model" title="Spiral model">Spiral</a></li>
<li><a href="V-model_(software_development)" title="V-model (software development)">V model</a></li>
<li><a href="Waterfall_model" title="Waterfall model">Waterfall</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Software_development_methodology" class="mw-redirect" title="Software development methodology">Methodologies</a> and frameworks</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Adaptive_software_development" title="Adaptive software development">ASD</a></li>
<li><a href="Disciplined_agile_delivery" title="Disciplined agile delivery">DAD</a></li>
<li><a href="DevOps" title="DevOps">DevOps</a></li>
<li><a href="Dynamic_systems_development_method" title="Dynamic systems development method">DSDM</a></li>
<li><a href="Feature-driven_development" title="Feature-driven development">FDD</a></li>
<li><a href="Iterative_and_incremental_development" title="Iterative and incremental development">IID</a></li>
<li><a href="Kanban_(development)" title="Kanban (development)">Kanban</a></li>
<li><a href="Lean_software_development" title="Lean software development">Lean SD</a></li>
<li><a href="Scrum_(software_development)#Large-scale_Scrum" title="Scrum (software development)">LeSS</a></li>
<li><a href="Model-driven_development" class="mw-redirect" title="Model-driven development">MDD</a></li>
<li><a href="Microsoft_Solutions_Framework" title="Microsoft Solutions Framework">MSF</a></li>
<li><a href="Personal_software_process" title="Personal software process">PSP</a></li>
<li><a href="Rapid_application_development" title="Rapid application development">RAD</a></li>
<li><a href="Rational_unified_process" title="Rational unified process">RUP</a></li>
<li><a href="Scaled_agile_framework" title="Scaled agile framework">SAFe</a></li>
<li><a href="Scrum_(software_development)" title="Scrum (software development)">Scrum</a></li>
<li><a href="SEMAT" title="SEMAT">SEMAT</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li>
<li><a href="Team_software_process" title="Team software process">TSP</a></li>
<li><a href="Unified_process" title="Unified process">UP</a></li>
<li><a href="Extreme_programming" title="Extreme programming">XP</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Supporting disciplines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Software_configuration_management" title="Software configuration management">Configuration management</a></li>
<li><a href="Deployment_management#Computer_science" title="Deployment management">Deployment management</a></li>
<li><a href="Software_documentation" title="Software documentation">Documentation</a></li>
<li><a href="Software_project_management" title="Software project management">Project management</a></li>
<li><a href="Software_quality_assurance" title="Software quality assurance">Quality assurance</a></li>
<li><a href="User_experience" title="User experience">User experience</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Practices</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Acceptance_test-driven_development" title="Acceptance test-driven development">ATDD</a></li>
<li><a href="Behavior-driven_development" title="Behavior-driven development">BDD</a></li>
<li><a href="Extreme_programming_practices#Collective_code_ownership" title="Extreme programming practices">CCO</a></li>
<li><a href="Continuous_delivery" title="Continuous delivery">CD</a></li>
<li><a href="Continuous_integration" title="Continuous integration">CI</a></li>
<li><a href="Domain-driven_design" title="Domain-driven design">DDD</a></li>
<li><a href="Pair_programming" title="Pair programming">PP</a></li>

<li><a href="Stand-up_meeting" title="Stand-up meeting">Stand-up</a></li>
<li><a href="Test-driven_development" title="Test-driven development">TDD</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)"><a href="Programming_tool" title="Programming tool">Tools</a></div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Build_automation" title="Build automation">Build automation</a></li>
<li><a href="Compiler" title="Compiler">Compiler</a></li>
<li><a href="Debugger" title="Debugger">Debugger</a></li>
<li><a href="Graphical_user_interface_builder" title="Graphical user interface builder">GUI builder</a></li>
<li><a href="Integrated_development_environment" title="Integrated development environment">IDE</a></li>
<li><a href="Infrastructure_as_code" title="Infrastructure as code">Infrastructure as code</a></li>
<li><a href="Profiling_(computer_programming)" title="Profiling (computer programming)">Profiler</a></li>
<li><a href="Application-release_automation" title="Application-release automation">Release automation</a></li>
<li><a href="UML_tool" title="UML tool">UML Modeling</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Standards and bodies of knowledge</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Capability_Maturity_Model_Integration" title="Capability Maturity Model Integration">CMMI</a></li>
<li><a href="IEEE_Standards_Association" title="IEEE Standards Association">IEEE standards</a></li>
<li><a href="International_Requirements_Engineering_Board" title="International Requirements Engineering Board">IREB</a></li>
<li><a href="ISO_9001" class="mw-redirect" title="ISO 9001">ISO 9001</a></li>
<li><a href="ISO/IEC_JTC_1/SC_7" title="ISO/IEC JTC 1/SC 7">ISO/IEC standards</a></li>
<li><a href="ITIL" title="ITIL">ITIL</a></li>
<li><a href="Object_Management_Group" title="Object Management Group">OMG</a></li>
<li><a href="Project_Management_Body_of_Knowledge" title="Project Management Body of Knowledge">PMBOK</a></li>
<li><a href="Software_Engineering_Body_of_Knowledge" title="Software Engineering Body of Knowledge">SWEBOK</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Glossaries</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Glossary_of_artificial_intelligence" title="Glossary of artificial intelligence">Artificial intelligence</a></li>
<li><a href="Glossary_of_computer_science" title="Glossary of computer science">Computer science</a></li>
<li><a href="Glossary_of_electrical_and_electronics_engineering" title="Glossary of electrical and electronics engineering">Electrical and electronics engineering</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-content">
<div class="sidebar-list mw-collapsible mw-collapsed"><div class="sidebar-list-title" style="color: var(--color-base)">Outlines</div><div class="sidebar-list-content mw-collapsible-content hlist">
<ul><li><a href="Outline_of_software_development" title="Outline of software development">Outline of software development</a></li></ul></div></div></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p><b>Specification by example</b> (<b>SBE</b>) is a collaborative approach to defining <a href="Software_requirement" class="mw-redirect" title="Software requirement">requirements</a> and business-oriented <a href="Functional_test" class="mw-redirect" title="Functional test">functional tests</a> for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements. It is applied in the context of <a href="Agile_software_development" title="Agile software development">agile software development</a> methods, in particular <a href="Behavior-driven_development" title="Behavior-driven development">behavior-driven development</a>. This approach is particularly successful for managing requirements and functional tests on large-scale projects of significant domain and organisational complexity.<sup id="cite_ref-Adzic11_1-0" class="reference"><a href="#cite_note-Adzic11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Specification by example is also known as example-driven development, executable requirements, <a href="Acceptance_test%E2%80%93driven_development" class="mw-redirect" title="Acceptance test–driven development">acceptance test–driven development</a> (ATDD<sup id="cite_ref-Pugh11_2-0" class="reference"><a href="#cite_note-Pugh11-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> or A-TDD<sup id="cite_ref-Larman10_3-0" class="reference"><a href="#cite_note-Larman10-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>), Agile Acceptance Testing,<sup id="cite_ref-Adzic09_4-0" class="reference"><a href="#cite_note-Adzic09-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Test-Driven Requirements (TDR).
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Advantages">Advantages</h2></div>
<p>Highly abstract or novel new concepts can be difficult to understand without concrete examples. Specification by example is intended to construct an accurate understanding, and significantly reduces feedback loops in software development, leading to less rework, higher product quality, faster turnaround time for software changes and better alignment of activities of various roles involved in software development such as testers, analysts and developers.<sup id="cite_ref-Adzic11_1-1" class="reference"><a href="#cite_note-Adzic11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples_as_a_single_source_of_truth">Examples as a single source of truth</h2></div>
<p>A key aspect of specification by example is creating a <a href="Single_source_of_truth" title="Single source of truth">single source of truth</a> about required changes from all perspectives. When <a href="Business_analyst" title="Business analyst">business analysts</a> work on their own documents, <a href="Software_developer" class="mw-redirect" title="Software developer">software developers</a> maintain their own documentation and testers maintain a separate set of functional tests, <a href="Software_delivery" class="mw-redirect" title="Software delivery">software delivery</a> effectiveness is significantly reduced by the need to constantly coordinate and synchronise those different versions of truth. With short iterative cycles, such coordination is often required on weekly or biweekly basis. With Specification by example, different roles participate in creating a single source of truth that captures everyone's understanding. Examples are used to provide clarity and precision, so that the same information can be used both as a <a href="Specification" class="mw-redirect" title="Specification">specification</a> and a business-oriented functional test. Any additional information discovered during development or delivery, such as clarification of functional gaps, missing or incomplete requirements or additional tests, is added to this single source of truth. As there is only one source of truth about the functionality, there is no need for coordination, translation and interpretation of knowledge inside the delivery cycle.
</p><p>When applied to required changes, a refined set of examples is effectively a specification and a business-oriented <a href="Acceptance_testing" title="Acceptance testing">test for acceptance</a> of software functionality. After the change is implemented, specification with examples becomes a document explaining existing functionality. As the validation of such documents is automated, when they are validated frequently, such documents are a reliable source of information on business functionality of underlying software. To distinguish between such documents and typical printed documentation, which quickly gets outdated,<sup id="cite_ref-Adzic09_4-1" class="reference"><a href="#cite_note-Adzic09-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> a complete set of specifications with examples is called Living Documentation.<sup id="cite_ref-Adzic11_1-2" class="reference"><a href="#cite_note-Adzic11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Key_practices">Key practices</h2></div>
<p>Teams that apply Specification by example successfully commonly apply the following process patterns:<sup id="cite_ref-Adzic11_1-3" class="reference"><a href="#cite_note-Adzic11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Deriving scope from goals</li>
<li>Specifying collaboratively - through all-team specification workshops, smaller meetings or teleconference reviews</li>
<li>Illustrating requirements using examples</li>
<li>Refining specifications</li>
<li>Automating tests based on examples</li>
<li>Validating the underlying software frequently using the tests</li>
<li>Evolving a documentation system from specifications with examples to support future development</li></ul>
<p>Software teams that apply specification by example within a Scrum framework typically spend 5%-10% of their time in refining the product backlog, including specifying collaboratively, illustrating requirements using examples and refining examples.<sup id="cite_ref-Larman10_3-1" class="reference"><a href="#cite_note-Larman10-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Example_Mapping">Example Mapping</h3></div>
<p>Example Mapping is a simple technique that can steer the conversation and derive Acceptance criteria in a short time. The process breaks stories into Rules and Examples documented in the form of specification by example, and is a widely used technique in the BDD sphere.<sup id="cite_ref-ccblog-wynne_5-0" class="reference"><a href="#cite_note-ccblog-wynne-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Applicability">Applicability</h2></div>
<p>Specification by example applies to projects with sufficient organisational and domain complexity to cause problems in understanding or communicating requirements from a business domain perspective. It does not apply to purely technical problems or where the key complexity is not in understanding or communicating knowledge. There are documented usages of this approach in domains including investment banking, financial trading, insurance, airline ticket reservation, online gaming and price comparison.<sup id="cite_ref-Adzic11_1-4" class="reference"><a href="#cite_note-Adzic11-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> A similar approach is documented also in a nuclear-power plant simulation project.<sup id="cite_ref-Larman10_3-2" class="reference"><a href="#cite_note-Larman10-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>Tests based on shared examples fit best in the category of tests designed to support a team while delivering software from a business perspective (see Agile Testing Quadrants<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>) - ensuring that the right product is built. They do not replace tests that look at a software system from a purely technical perspective (those that evaluate whether a product is built the right way, such as unit tests, component or technical integration tests) or tests that evaluate a product after it was developed (such as security penetration tests).
</p>
<div class="mw-heading mw-heading2"><h2 id="Drawbacks">Drawbacks</h2></div>
<p>Specification by Example (SBE) has some challenges:
</p>
<ul><li><b>Collaboration and Training:</b> Requires significant upfront effort and cultural adjustment to involve all stakeholders in creating shared examples.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup></li>
<li><b>Time-Intensive Example Creation:</b> Defining clear, testable examples can take notable time during development cycles.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li>
<li><b>Reliance on Example Quality:</b> Ineffective or incomplete examples can leave gaps in specifications and tests.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li>
<li><b>The Need to Maintain Examples:</b>There is a need to maintain examples as code and requirements change.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Comparison_with_other_testing_approaches">Comparison with other testing approaches</h2></div>
<p>Specification by Example (SBE) is a form of <b>example-based testing</b>, where software behavior is specified and validated through concrete input-output examples. This approach aids shared understanding but inherently tests only the illustrated cases.
In contrast, <b>property-based testing</b> centers on defining general behavioral properties or invariants that software should satisfy for all valid inputs. Test cases are automatically generated to explore broad input spaces, revealing edge cases that example-based tests may miss.
Property-based testing can be understood through high-level <b>test properties</b>, which are broad assertions about software behavior rather than enumerated example lists. These properties guide automated test generation tools to systematically explore execution paths and identify property violations, thereby complementing example-based testing by increasing coverage and uncovering subtle defects.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>The earliest documented usage of realistic examples as a single source of truth, requirements and automated tests, on software projects is the WyCash+ project, described by <a href="Ward_Cunningham" title="Ward Cunningham">Ward Cunningham</a> in the paper A Pattern Language of Competitive Development <sup id="cite_ref-Cunningham06_13-0" class="reference"><a href="#cite_note-Cunningham06-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Cunningham06-2_14-0" class="reference"><a href="#cite_note-Cunningham06-2-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> in 1996. The name Specification by Example was coined by <a href="Martin_Fowler_(software_engineer)" title="Martin Fowler (software engineer)">Martin Fowler</a> in 2004.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p><p>Specification by Example is an evolution of the Customer Test<sup id="cite_ref-Beck99_16-0" class="reference"><a href="#cite_note-Beck99-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> practice of <a href="Extreme_Programming" class="mw-redirect" title="Extreme Programming">Extreme Programming</a> proposed around 1997 and Ubiquitous Language<sup id="cite_ref-Evans04_17-0" class="reference"><a href="#cite_note-Evans04-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> idea from <a href="Domain-driven_design" title="Domain-driven design">Domain-driven design</a> from 2004, using the idea of black-box tests as requirements described by Weinberg and Gause<sup id="cite_ref-Weinberg89_18-0" class="reference"><a href="#cite_note-Weinberg89-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> in 1989.
</p>
<div class="mw-heading mw-heading2"><h2 id="Automation">Automation</h2></div>
<p>Successful application of Specification by example on large scale projects requires frequent validation of software functionality against a large set of examples (tests). In practice, this requires tests based on examples to be automated. A common approach is to automate the tests but keep examples in a form readable and accessible to non-technical and technical team members, keeping the examples as a single source of truth. This process is supported by a class of test automation tools which work with tests divided into two aspects - the specification and the automation layer. The specification of a test which is often in a plain text or HTML form and contains the examples and auxiliary descriptions. The automation layer connects the example to a software system under test. Examples of such tools are:
</p>
<ul><li><a href="Behat_(computer_science)" class="mw-redirect" title="Behat (computer science)">Behat</a></li>
<li><a href="Concordion" title="Concordion">Concordion</a></li>
<li><a href="Cucumber_(software)" title="Cucumber (software)">Cucumber</a></li>
<li><a href="FitNesse" title="FitNesse">FitNesse</a></li>
<li><a href="Framework_for_Integrated_Test" class="mw-redirect" title="Framework for Integrated Test">Framework for Integrated Test</a></li>
<li><a href="Robot_Framework" title="Robot Framework">Robot Framework</a></li>
<li><a rel="nofollow" class="external text" href="https://specflow.org/">SpecFlow</a> for .NET</li>
<li><a href="Gauge_(software)" title="Gauge (software)">Gauge (software)</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;">
<ol class="references">
<li id="cite_note-Adzic11-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-Adzic11_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Adzic11_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Adzic11_1-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Adzic11_1-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-Adzic11_1-4"><sup><i><b>e</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFAdzic2011" class="citation book cs1"><a href="Gojko_Adzic" title="Gojko Adzic">Adzic, Gojko</a> (2011). <i>Specification by example: How successful teams deliver the right software</i>. Manning. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>9781617290084</bdi>.</cite></span>
</li>
<li id="cite_note-Pugh11-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Pugh11_2-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFPugh2011" class="citation book cs1">Pugh, Ken (2011). <i>Lean-Agile Acceptance Test Driven Development: Better Software Through Collaboration: A Tale of Lean-Agile Acceptance Test Driven Development</i>. Addison Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-71408-4</bdi>.</cite></span>
</li>
<li id="cite_note-Larman10-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-Larman10_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Larman10_3-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Larman10_3-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFLarmanVodde2010" class="citation book cs1">Larman, Craig; Vodde, Bas (2010). <a rel="nofollow" class="external text" href="https://archive.org/details/practicesforscal00larm_0"><i>Practices for Scaling Lean and Agile Development: Large, Multisite, and Offshore Product Development with Large-Scale Scrum</i></a>. Pearson. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-63640-9</bdi>.</cite></span>
</li>
<li id="cite_note-Adzic09-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-Adzic09_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Adzic09_4-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFAdzic2009" class="citation book cs1"><a href="Gojko_Adzic" title="Gojko Adzic">Adzic, Gojko</a> (2009). <i>Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing</i>. Neuri. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-9556836-1-9</bdi>.</cite></span>
</li>
<li id="cite_note-ccblog-wynne-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-ccblog-wynne_5-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFWynne2015" class="citation web cs1">Wynne, Matt (8 December 2015). <a rel="nofollow" class="external text" href="https://cucumber.io/blog/bdd/example-mapping-introduction/">"Introducing Example Mapping"</a>. <i>Cucumber Blog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">10 May</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFCrispinGregory2008" class="citation book cs1">Crispin, Lisa; Gregory, Janet (2008). <i>Agile Testing: A Practical Guide for Testers and Agile Teams</i>. Addison Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-53446-0</bdi>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://trustedinstitute.com/concept/agile-project-management/agile-testing-quality-assurance/specification-by-example/">"Specification by Example test - Agile Project Management questions"</a>. <i>Trusted Institute</i>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://neuri.co.uk/specbyexample.html">"Specification by Example - Neuri Consulting LLP"</a>. <i>Neuri Consulting LLP</i>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.iapm.net/en/blog/specification-by-example/">"Specification by Example - What is that?"</a>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite id="CITEREFAdzic2025" class="citation book cs1">Adzic, Gojko (2025). <i>Specification by Example</i>. Manning Publications.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://neuri.co.uk/specbyexample.html">"Specification by Example - Neuri Consulting LLP"</a>. <i>Neuri Consulting LLP</i>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.cis.upenn.edu/~bcpierce/papers/icse24-pbt-in-practice">"Property-Based Testing in Practice"</a>.</cite></span>
</li>
<li id="cite_note-Cunningham06-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cunningham06_13-0">^</a></b></span> <span class="reference-text"><cite class="citation book cs1"><i>Pattern Languages of Program Design 2</i>. Addison-Wesley. 1996. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-201-89527-8</bdi>.</cite></span>
</li>
<li id="cite_note-Cunningham06-2-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cunningham06-2_14-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFWard_Cunningham" class="citation web cs1">Ward Cunningham. <a rel="nofollow" class="external text" href="http://c2.com/ppr/episodes.html">"EPISODES: A Pattern Language of Competitive Development Part I"</a>. C2.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-01-08</span></span>.</cite></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite id="CITEREFMartin_Fowler_18_March_20042004" class="citation web cs1">Martin Fowler 18 March 2004 (2004-03-18). <a rel="nofollow" class="external text" href="http://martinfowler.com/bliki/SpecificationByExample.html">"SpecificationByExample"</a>. Martinfowler.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-01-08</span></span>.</cite><span class="cs1-maint citation-comment"><code class="cs1-code">{{cite web}}</code>: CS1 maint: numeric names: authors list (link)</span></span>
</li>
<li id="cite_note-Beck99-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-Beck99_16-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFBeck1999" class="citation book cs1"><a href="Kent_Beck" title="Kent Beck">Beck, K.</a> (1999). <i>Extreme Programming Explained: Embrace Change</i>. Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>978-0-321-27865-4</bdi>.</cite></span>
</li>
<li id="cite_note-Evans04-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-Evans04_17-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFEvans2004" class="citation book cs1">Evans, Eric (2004). <i>Domain-Driven Design:Tackling Complexity in the Heart of Software</i>. Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-321-12521-5</bdi>.</cite></span>
</li>
<li id="cite_note-Weinberg89-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-Weinberg89_18-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFWeinbergGause1989" class="citation book cs1"><a href="Gerald_Weinberg" title="Gerald Weinberg">Weinberg, Gerald</a>; Gause, Donald (1989). <a rel="nofollow" class="external text" href="https://archive.org/details/exploringrequire00gaus"><i>Exploring Requirements: Quality Before Design</i></a>. Dorset House. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-932633-13-7</bdi>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://groups.google.com/group/specificationbyexample">Google discussion group</a></li>
<li><a rel="nofollow" class="external text" href="http://specificationbyexample.com/resources.html">Books, videos, tools and presentations from Specificationbyexample.com</a></li>
<li><a rel="nofollow" class="external text" href="http://martinfowler.com/bliki/SpecificationByExample.html">Definition on Martin Fowler's bliki</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-03-16" href="https://en.wikipedia.org/wiki/?title=Specification_by_example&amp;oldid=1280855646">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>